#include <iostream>
#include <stdlib.h>

using namespace std; 	//introduces namespace std

//template<class KEY, class da>
class avl_node
		{
		public:
			int key;
			int data;
			 avl_node *parent, *Right_s, *Left_s;
			int DeltaHeight;
		};

class avl_tree 
	{
	private:
		
		// if node was found return true and CurrentNode=node
		// if node was'nt found return false and CurrentNode=CurrentNode->Parent
		//
		//
avl_node root ;
		bool  FindNode(avl_node& CurrentNode);
		void roll(struct avl_node_t *p){}
		void recursive_insert(const int key, int data);
		void insert_node(int key, int data);
	public:		
/*only temporary*/


		
		

/*only temporary end*/
		avl_tree(){}
		~avl_tree(){}
		void insert(const int key, int data,avl_node* parent, bool side);
		void remove (const int key);
		int& retrive (const int key);
		
};
//void avl_tree::insert(const int key, int data)
//{
//
//}
void avl_tree::insert(const int key, int data,avl_node* parent, bool side)
{
	avl_node *new_node= new avl_node;
	new_node->key = key;
	new_node->data = data;
	if (side == true)
	{
		parent->Left_s = new_node;
	}
	else
	{
		parent->Right_s = new_node;
	}

	


}

//avl_node avl_tree::FindNode(avl_node& CurrentNode)
//{
//
//	if (currentNode->Right_s == NULL) && (currentNode->Left_s == NULL)
//	{
//		return currentNode;
//	}
//	else if (currentNode->key == key)
//	{
//		//error
//	}
//		else if (currentNode->key > key)
//		{
//			FindNode(currentNode->Left_s);
//				
//		}
//		else
//		{
//			FindNode(currentNode->Right_s);
//		}
//
//
//}

//bool avl_tree:: recursive_insert(const int key, avl_node newNode, avl_node currentNode)
//{
//	FindNode
//	if (currentNode == NULL)
//	{
//		return false;
//	}
//	else if (currentNode->key == key)
//	{
//		error
//	}
//		else if (currentNode->key > key)
//		{
//			if (recursive_insert(keycurrentNode->Left_s) == false)
//			{
//				
//			}			
//		}
//		else
//		{
//			currentNode = currentNode->Right_s;
//		}
//}
//
//void avl_tree:: recursive_remove(const int key, avl_node currentNode)
//{
//	if (currentNode->Right_s == NULL) && (currentNode->Left_s == NULL)
//	{
//		delete currentNode;
//	}
//	else if (currentNode->key == key)
//	{
//		error
//	}
//		else if (currentNode->key > key)
//		{
//			recursive_remove(key,keycurrentNode->Left_s);
//				
//		}
//		else
//		{
//			recursive_remove(key,keycurrentNode->Right_s);
//		}
//}
//
//void avl_tree::remove(const int key)
//{
//	if (key == root->key)
//	{
//	}
//
//	if (currentNode->Right_s == NULL) && (currentNode->Left_s == NULL)
//	{
//		delete currentNode;
//	}
//	else if (currentNode->key == key)
//	{
//		error
//	}
//		else if (currentNode->key > key)
//		{
//			recursive_remove(key,keycurrentNode->Left_s);
//				
//		}
//		else
//		{
//			recursive_remove(key,keycurrentNode->Right_s);
//		}
//}
//
//void avl_tree::insert(const int key, int data)
//{
//
//
//	
//	avl_node newNode = new struct avl_node_t, currentNode = root, parentNode = root;
//	currentNode FindNode(currentNode);
//	
//	if (parentNode == NULL)
//	{
//		root = newNode;
//	}
//	while (currentNode != NULL)
//	{
//		if (currentNode->key == key)
//		{
//		}
//		else if (currentNode->key > key)
//		{
//			if (currentNode->Left_s == NULL)
//			{
//			}
//			else
//			{
//				currentNode = currentNode->Left_s; 
//			}
//		}
//		else
//		{
//			currentNode = currentNode->Right_s;
//		}
//	}
//	currentNode
//root->Left_s = 
//	roll(newNode);
//}
int main()
{
avl_node new_node;
avl_tree new_tree ;
new_node.key = 3;
new_node.data = 2;

new_tree.insert(1,4,&new_node,0);

}